package main

import "unicode"


// 我的写法： 线性遍历，O(n) 时间复杂度。  统计大小写字母数量再分情况讨论
func detectCapitalUse(word string) bool {
	Lower, Upper := 0, 0
	for _, char := range word {
		// 统计大小写的数量
		if 'A' <= byte(char) && 'Z' >= byte(char) {
			Upper++
		} else {
			Lower++
		}
	}
	// 分情况讨论
	// 如果首字母是大写
	if word[0] >= 'A' && word[0] <= 'Z' {
		if Lower == len(word) - 1 ||
			Upper == len(word){
			return true
		}
		// 开头小写
	} else if Lower == len(word) {
		return true
	}
	return false
}




// 官方题解
func detectCapitalUse(word string) bool {
	// 若第 1 个字母为小写，则需额外判断第 2 个字母是否为小写
	if len(word) >= 2 && unicode.IsLower(rune(word[0])) && unicode.IsUpper(rune(word[1])) {
		return false
	}

	// 无论第 1 个字母是否大写，其他字母必须与第 2 个字母的大小写相同
	for i := 2; i < len(word); i++ {
		if unicode.IsLower(rune(word[i])) != unicode.IsLower(rune(word[1])) {
			return false
		}
	}
	return true
}

